5
תגובות

עזרה בOPP

פתח shlomo120 ,
אהלן.
יש לי מחלקה של עיצוב שאיתה אני טוען את קובצי העיצוב שלי .

משהו כזה :
<?php

class style
{
  private $ext = '.php';
  private $dir = 'data/style/';
  private $allowd_style_part = array('meta','header','footer');
  private $data = array();
 
  public function __construct()
  {
 
  }
  public function __get($key)
  {
    return array_key_exists($key, $this->data) ? $this->data[$key] : null;
  }
     
  public function __set($key, $value)
  {
    $this->data[$key] = $value;
  }
 
  public function load($part)
  {
    if(in_array($part,$this->allowd_style_part))
    {
      require $this->dir,$part,$this->ext;
    }else{
      throw new Exception($part.' Doesnt Find in dir "'.$this->dir.'"');
    }
 
  }

}

עכשיו , איך אני יכול ליצור דבר כזה ?
$style = new style();
$style->meta->title = "PageTitle";
$style->load('meta');


שבקובץ שאני טוען אני אגש אל המשתנה title בצורה הזו :
$this->title;

תודה .

5 תשובות

avatar ענה ilikeme ב 24 לדצמבר 2012 #

class Meta
{
  public $title;
}

class style
{
  private $ext = '.php';
  private $dir = 'data/style/';
  private $allowd_style_part = array('meta','header','footer');
  private $data = array();
  private $meta = new Meta();
 
  public function __construct()
  {
 
  }
  public function __get($key)
  {
    return array_key_exists($key, $this->data) ? $this->data[$key] : null;
  }
     
  public function __set($key, $value)
  {
    $this->data[$key] = $value;
  }
 
  public function load($part)
  {
    if(in_array($part,$this->allowd_style_part))
    {
      require $this->dir,$part,$this->ext;
    }else{
      throw new Exception($part.' Doesnt Find in dir "'.$this->dir.'"');
    }
 
  }

}

avatar ענה shlomo120 ב 24 לדצמבר 2012 #

אני רוצה אבל שזה יהיה באופן דינאמי , לכל מיני קובצי עיצוב שיהיה לי - גם כאלה לא מתוכננים.

avatar ענה Michael ב 24 לדצמבר 2012 #

תחשוב קצת יותר אופקי. getters and setters בסיסי כבר ממישת, עכשיו תחשוב איך להוסיף אפשרות לnested arrays (מערך בתוך מערך..)

avatar ענה ilikeme ב 24 לדצמבר 2012 #

פשוט תעשה לולאה כזאת

class Meta
{
     public function __construct()
     {
           foreach($arr as $a)
           {
                   $this->$a['name'] = $a['content'];
            }
     }
}


או איך שזה לא עובד אצלך בקוד (אין לי מושג)
ודרך אגב למה אתה לא משתמש בFRAMEWORK או מערכת מוכנה?

avatar ענה intval ב 24 לדצמבר 2012 #

לא משנה כמה דינאמי אתה רוצה וכמה דינאמי השפה מאפשרת, אבל כשאתה אומר שאתה רוצה
$style->meta->title = "PageTitle";
מה זה המשתנה meta כאן? מאיזה סוג הוא? מערך? אובייקט מסוג meta? אובייקט מסוג StdClass ?

בתור מתכנת אתה בראש צריך להחליט מאיזה סוג יהיה המשתנה הזה ואיך אתה רוצה להשתמש בו אחרי זה.
אין דבר כזה בתכנות "כאלה לא מתוכננים." מבחינתך אתה מתנן הכל בגדר השימושים האפשריים.
ככה שהתשובה הראשונה של ilikeme הכי נכונה.